package reference;

import org.junit.Test;

import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * 构造器引用
 * <p>
 * 格式：
 * 类名 :: new
 *
 * 说明：
 * > 调用了类名对应的类中的某一个确定的构造器
 * > 具体调用的是类中的哪一个构造器？取决于函数式接口的抽象方法的形参列表。
 *
 */
public class ConstructorRefTest {
    // 构造器引用
    @Test
    public void test1() {
        Supplier<Employee> supplier = new Supplier<Employee>() {
            @Override
            public Employee get() {
                return new Employee();
            }
        };
        // 构造器引用
        Supplier<Employee> supplier2 = () -> new Employee();
        Supplier<Employee> supplier1 = Employee::new;// public Employee();

        Function<Integer, Employee> function = Employee::new; // public Employee(int id);
        System.out.println(function.apply(1001));

        BiFunction<String, Integer, Employee> biFunction = Employee::new;
        System.out.println(biFunction.apply("Tom", 1002));

    }


}
